import config from './config.js';

export default class Request {
	http(param) {
		let url = param.url;
		let method = param.method; // 大写
		let header = param.header || {};
		let data = Object.assign(param.data || {});
		let hideLoading = param.hideLoading || false;
		let index = param.type
		let requestUrl = config.api()[index]
		if (method) {
			if (method == "POST") {
				header = Object.assign({
					'content-type': "application/x-www-form-urlencoded",
					'content-type': 'application/json;',
				}, param.header)
			} else {
				header = Object.assign({
					'content-type': "application/json"
				}, param.header)
			}
		}
		let token = uni.getStorageSync('TOKEN_YX')
		let token_en = uni.getStorageSync('TOKEN_EN')
		let token_hy = uni.getStorageSync('TOKEN_HY')
		// console.log('TOKEN_EN', uni.getStorageSync('TOKEN_EN'))
		if (index === 0 && token) {
			header['Authorization'] = token
		}
		if (index === 1 && token_en) {
			header['Authorization'] = token_en
			header['Terminal'] = 'WECHAT_APP'
		}
		if (!hideLoading) {
			uni.showLoading()
		}
		return new Promise((resolve, reject) => {
			uni.request({
				url: requestUrl + url,
				data: data,
				method: method,
				header: header,
				success: (res) => {
					// console.log('url', requestUrl + url)
					// console.log('header', header)
					// console.log('data', data)
					// console.log('res', JSON.stringify(res))
					// 如果有显示loading的话，可以在这里选择隐藏
					if (!hideLoading) {
						uni.hideLoading();
					}
					if (res.statusCode) {
						if (res.statusCode === 200) {
							// 判断请求是否成功（通过后端接口返回的状态进行判断）
							// code：200 即成功，不为 200 的话就是请求错误/失败
							if (res.data.code === 200 || res.data.code === 5001 || res.data
								.code === 239 || res.data.code === 402) {
								// 402 人脸识别登录用户不存在
								resolve(res.data)
								return true
							} else {
								if (res.data.code === 401) {
									// 这里是由于token过期导致的错误码
									// 可以直接跳转到login页面，也可以直接刷新token
									uni.navigateTo({
										url: '/pages/login/login'
									})
								} else if (res.data.code === 500) {} else {
									// 其他错误时，直接通过toast提示
									uni.showToast({
										title: res.data.msg,
										icon: 'none'
									})
								}
								resolve(res.data)
								return false;
							}
						} else {
							if (res.data && res.data.code && res.data.code === 401) {
								uni.navigateTo({
									url: '/pages/login/login'
								})
							} else {
								// 错误码及错误提示待优化！！！
								uni.showToast({
									title: '服务异常，请稍后重试',
									icon: 'none'
								})
								reject(res.data, '服务异常，请稍后重试')
							}
						}
					} else {
						uni.showToast({
							title: '服务异常，请稍后重试',
							icon: 'none'
						})
						reject('服务异常，请稍后重试')
					}
				},
				fail: (err) => {
					console.log(err)
					uni.showToast({
						title: '网络异常，请稍后重试',
						icon: 'none'
					})
					// 如果有显示loading，需要隐藏
					if (!hideLoading) {
						uni.hideLoading();
					}
					return false;
				},
			})
		})
	}
}